#!/bin/bash

# 定义颜色变量，方便输出提示信息
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 打印欢迎信息
echo -e "${GREEN}=== 欢迎使用 NFS 一键配置脚本 ===${NC}"
echo "本脚本将帮助你配置 NFS 服务器和客户端，并设置自启动。"
echo ""

# 判断是配置主机还是从机
read -p "你是要配置 [1] 主机（NFS 服务器） 还是 [2] 从机（NFS 客户端）？请输入数字 (1/2): " choice

if [[ $choice == "1" ]]; then
    echo -e "${YELLOW}=== 开始配置 NFS 主机 ===${NC}"

    # 安装 NFS 服务
    echo -e "${GREEN}正在安装 nfs-kernel-server...${NC}"
    sudo apt update
    sudo apt install -y nfs-kernel-server

    # 设置共享目录
    read -p "请输入你想共享的目录路径（例如 /home/share）: " share_dir
    if [[ ! -d "$share_dir" ]]; then
        echo -e "${YELLOW}指定的目录不存在，正在创建...${NC}"
        sudo mkdir -p "$share_dir"
    fi

    # 设置允许访问的客户端 IP 或网段
    read -p "请输入允许访问此共享目录的客户端 IP 或网段（例如 192.168.0.0/24）: " client_ip

    # 配置 /etc/exports 文件
    echo -e "${GREEN}正在更新 /etc/exports 文件...${NC}"
    sudo bash -c "echo '$share_dir $client_ip(rw,sync,no_subtree_check)' >> /etc/exports"

    # 启动并启用 NFS 服务
    echo -e "${GREEN}正在启动并设置 nfs-kernel-server 自启动...${NC}"
    sudo systemctl restart nfs-kernel-server
    sudo systemctl enable nfs-kernel-server

    # 输出成功信息
    echo -e "${GREEN}NFS 主机配置完成！共享目录为：$share_dir${NC}"
    echo -e "客户端可以通过以下命令挂载共享目录："
    echo -e "sudo mount -t nfs $(hostname -I | awk '{print $1}'):$share_dir /mnt"

elif [[ $choice == "2" ]]; then
    echo -e "${YELLOW}=== 开始配置 NFS 从机 ===${NC}"

    # 安装 NFS 客户端工具
    echo -e "${GREEN}正在安装 nfs-common...${NC}"
    sudo apt update
    sudo apt install -y nfs-common

    # 设置挂载点
    read -p "请输入本地挂载点路径（例如 /mnt）: " mount_point
    if [[ ! -d "$mount_point" ]]; then
        echo -e "${YELLOW}指定的挂载点不存在，正在创建...${NC}"
        sudo mkdir -p "$mount_point"
    fi

    # 获取 NFS 主机地址和共享目录
    read -p "请输入 NFS 主机的 IP 地址（例如 192.168.0.100）: " nfs_server_ip
    read -p "请输入 NFS 主机上的共享目录路径（例如 /home/share）: " nfs_share_dir

    # 测试连接到 NFS 主机
    echo -e "${GREEN}正在测试连接到 NFS 主机...${NC}"
    showmount -e "$nfs_server_ip" || { echo -e "${RED}无法连接到 NFS 主机，请检查网络或 NFS 配置！${NC}"; exit 1; }

    # 挂载共享目录
    echo -e "${GREEN}正在挂载 NFS 共享目录...${NC}"
    sudo mount -t nfs "$nfs_server_ip:$nfs_share_dir" "$mount_point"

    # 配置自启动挂载
    read -p "是否需要设置开机自动挂载？(y/n): " auto_mount
    if [[ $auto_mount == "y" || $auto_mount == "Y" ]]; then
        echo -e "${GREEN}正在更新 /etc/fstab 文件以实现自启动挂载...${NC}"
        sudo bash -c "echo '$nfs_server_ip:$nfs_share_dir $mount_point nfs defaults 0 0' >> /etc/fstab"
        echo -e "${GREEN}已设置开机自动挂载！${NC}"
    fi

    # 输出成功信息
    echo -e "${GREEN}NFS 从机配置完成！共享目录已挂载到：$mount_point${NC}"

else
    echo -e "${RED}无效的选择，请重新运行脚本并输入 1 或 2！${NC}"
    exit 1
fi

echo -e "${GREEN}=== 脚本执行完毕！感谢使用！ ===${NC}"